// Map映射
// 键值对存储的集合引用类型，实现键值对的数据结构

// 1.创建，使用构造函数，参数为可迭代的对象，其包含键值对的数组(对象内嵌套一个键值对数组)，按顺序创建映射
const map=new Map([["A","a"],["B","b"],["C","c"]]);
// A：映射中的键，其类型可以为任意的数据类型，包括对象，数值，字符串等
// a：映射中的值，其类型也可以为任意数据类型

// 2.方法及属性
map.size
// 映射的键值对数量
map.set("D","d");
// 两个参数分别代表映射中的键与值，向映射中增加新的键值对，其返回值为新增后的映射
map.delete("A");
// 参数为键，删除映射中的对应键值对，删除成功返回ture，未找到该键反回false
map.clear();
// 清楚映射中的所有键值对,无返回值
map.get("A");
// 参数为键，在映射中按键查找键值对，返回查找到的键值对的值，未找到返回undefined
map.has("A");
// 参数为键，在映射中按键查找键值对，返回布尔值

// 3.顺序和迭代
// map中的键值对具有一定的输入顺序，可以进行顺序迭代
map.entries();
// 返回一个为键值对的迭代器
map[Symbol.iterator];
// 与map.entries()严格相对
map.keys();
// 返回一个为键的迭代器
map.values();
// 返回一个为值的迭代器
map.forEach(func,thisvalue);
// forEach()方法进行回调，第一个参数为包含键，值参数的函数(第一个参数为值，第二个参数为键)，第二个参数为函数中this的值
[...map];
// 映射可以采用展开操作符，直接展开成一个嵌套数组

// 返回的迭代器均可以用for-of循环进行遍历
// 在迭代时，可以对引用值的键进行修改

// 3.与Object的区别
// (1)键的类型
// Object键仅能为原始值，不能采用引用值，且其实质上为字符串
// Map键可以为任意类型，键为对象时，可以将对象赋值给变量
// (2)性能差异(存储，删除，查询，插入)
// Map可以存储更多的键值对，键值对删除性能更强
// 在插入性能和查询性能上，差异较小，但大量插入一般用Map，大量查询一般用Object
